#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include <numeric>

using namespace std;

/*HJJ QQ479287006
 *
 * 给定一个非空二叉树的根节点root, 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

示例 1：

输入：root = [3,9,20,null,null,15,7]
输出：[3.00000,14.50000,11.00000]
解释：第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。
因此返回 [3, 14.5, 11] 。
示例 2:

输入：root = [3,9,20,15,7]
输出：[3.00000,14.50000,11.00000]

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/average-of-levels-in-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 *
 * */
vector<double> averageOfLevels(TreeNode *root) {
    vector<int> ret;
    vector<int> t;
    queue < TreeNode * > q;
    if (!root)
        return ret;
    q.push(root);

    while (!q.empty()) {
        int size = q.size();

        for (int i = 0; i < size; ++i) {
            TreeNode *temp = q.front();
            t.push_back(temp->val);
            q.pop();
            if (temp->left)
                q.push(temp->left);

            if (temp->right)
                q.push(temp->right);
        }
        //这边也可以直接sum 不用容器
        double sum = accumulate(t.begin(), t.end(), 0);
        ret.push_back(sum / t.size());
        t.clear();


    }


    return ret;
}